diff -up abiword-2.8.6/plugins/bmp/xp/ie_impGraphic_BMP.cpp.png15 abiword-2.8.6/plugins/bmp/xp/ie_impGraphic_BMP.cpp
--- abiword-2.8.6/plugins/bmp/xp/ie_impGraphic_BMP.cpp.png15	2012-02-27 15:39:39.258617605 -0500
+++ abiword-2.8.6/plugins/bmp/xp/ie_impGraphic_BMP.cpp	2012-02-27 15:48:37.830936901 -0500
@@ -191,7 +191,14 @@ UT_Error IE_ImpGraphic_BMP::_convertGrap
 
 	/* Clean Up Memory Used */
 		
+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+	int num_palette;
+	png_colorp palette;
+	png_get_PLTE(m_pPNG, m_pPNGInfo, &palette, &num_palette);
+	FREEP(palette);
+#else
 	FREEP(m_pPNGInfo->palette);
+#endif
 	DELETEP(pBB);
 	png_destroy_write_struct(&m_pPNG, &m_pPNGInfo);
    
@@ -313,7 +320,11 @@ UT_Error IE_ImpGraphic_BMP::Initialize_P
 	 * the normal method of doing things with libpng).  REQUIRED unless you
 	 * set up your own error handlers in the png_create_read_struct() earlier.
 	 */
+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+	if (setjmp(png_jmpbuf(m_pPNG)))
+#else
 	if (setjmp(m_pPNG->jmpbuf))
+#endif
 	{
 		/* Free all of the memory associated with the png_ptr and info_ptr */
 		png_destroy_write_struct(&m_pPNG, &m_pPNGInfo);
@@ -332,7 +343,11 @@ UT_Error IE_ImpGraphic_BMP::Initialize_P
 	UT_Error IE_ImpGraphic_BMP::Convert_BMP_Pallet(UT_ByteBuf* pBB)
 	{
 		/* Reset error handling for libpng */
+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+		if (setjmp(png_jmpbuf(m_pPNG)))
+#else
 		if (setjmp(m_pPNG->jmpbuf))
+#endif
 		{
 			png_destroy_write_struct(&m_pPNG, &m_pPNGInfo);
 			return UT_ERROR;
@@ -372,7 +387,11 @@ UT_Error IE_ImpGraphic_BMP::Initialize_P
 UT_Error IE_ImpGraphic_BMP::Convert_BMP(UT_ByteBuf* pBB)
 {
 	/* Reset error handling for libpng */
+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+        if (setjmp(png_jmpbuf(m_pPNG)))
+#else
 	if (setjmp(m_pPNG->jmpbuf))
+#endif
 	{
 		png_destroy_write_struct(&m_pPNG, &m_pPNGInfo);
 		return UT_ERROR;
diff -up abiword-2.8.6/plugins/garble/xp/abiword-garble-png.cpp.png15 abiword-2.8.6/plugins/garble/xp/abiword-garble-png.cpp
--- abiword-2.8.6/plugins/garble/xp/abiword-garble-png.cpp.png15	2012-02-27 15:31:30.178868169 -0500
+++ abiword-2.8.6/plugins/garble/xp/abiword-garble-png.cpp	2012-02-27 15:36:17.795368497 -0500
@@ -79,7 +79,11 @@ bool abiword_document::garble_png( void*
 		png_set_strip_alpha( png_ptr );
 		png_set_interlace_handling( png_ptr );
 		png_set_bgr( png_ptr );
+#if (PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4) && defined(PNG_EASY_ACCESS_SUPPORTED)
+		rowbytes = png_get_rowbytes( png_ptr, info_ptr );
+#else
 		rowbytes = info_ptr->rowbytes;
+#endif
 		png_destroy_read_struct( &png_ptr, &info_ptr, NULL );
 	}
 
diff -up abiword-2.8.6/src/af/util/xp/ut_png.cpp.png15 abiword-2.8.6/src/af/util/xp/ut_png.cpp
--- abiword-2.8.6/src/af/util/xp/ut_png.cpp.png15	2012-02-27 15:11:18.599397989 -0500
+++ abiword-2.8.6/src/af/util/xp/ut_png.cpp	2012-02-27 15:12:20.560859433 -0500
@@ -71,7 +71,11 @@ bool UT_PNG_getDimensions(const UT_ByteB
 	 * the normal method of doing things with libpng).  REQUIRED unless you
 	 * set up your own error handlers in the png_create_read_struct() earlier.
 	 */
+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+	if (setjmp(png_jmpbuf(png_ptr)))
+#else
 	if (setjmp(png_ptr->jmpbuf))
+#endif
 	{
 		/* Free all of the memory associated with the png_ptr and info_ptr */
 		png_destroy_read_struct(&png_ptr, &info_ptr, static_cast<png_infopp>(NULL));
diff -up abiword-2.8.6/src/wp/impexp/gtk/ie_impGraphic_GdkPixbuf.cpp.png15 abiword-2.8.6/src/wp/impexp/gtk/ie_impGraphic_GdkPixbuf.cpp
--- abiword-2.8.6/src/wp/impexp/gtk/ie_impGraphic_GdkPixbuf.cpp.png15	2012-02-27 15:24:23.959572417 -0500
+++ abiword-2.8.6/src/wp/impexp/gtk/ie_impGraphic_GdkPixbuf.cpp	2012-02-27 15:26:42.549367943 -0500
@@ -185,7 +185,11 @@ UT_Error IE_ImpGraphic_GdkPixbuf::import
 /** needed for the stejmp context */
 UT_Error IE_ImpGraphic_GdkPixbuf::_png_write(GdkPixbuf * pixbuf)
 {
+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+	if (setjmp(png_jmpbuf(m_pPNG)))
+#else
 	if (setjmp(m_pPNG->jmpbuf))
+#endif
 	{
 		DELETEP(m_pPngBB);
 		png_destroy_write_struct(&m_pPNG, &m_pPNGInfo);
@@ -446,7 +450,11 @@ UT_Error IE_ImpGraphic_GdkPixbuf::Initia
 	 * the normal method of doing things with libpng).  REQUIRED unless you
 	 * set up your own error handlers in the png_create_read_struct() earlier.
 	 */
+#if PNG_LIBPNG_VER_MAJOR >= 1 && PNG_LIBPNG_VER_MINOR >= 4
+	if (setjmp(png_jmpbuf(m_pPNG)))
+#else
 	if (setjmp(m_pPNG->jmpbuf))
+#endif
 	{
 		/* Free all of the memory associated with the png_ptr and info_ptr */
 		png_destroy_write_struct(&m_pPNG, &m_pPNGInfo);
